//使用class关键字定义一个类
// class 类名 {
//     属性名: 类型;
//
//     constructor(参数: 类型){
//         this.属性名 = 参数;
//     }
//
//     方法名(){
//     ....
//     }
//
// }

 class Bus{
     public name  ="kerwin" //共有属性
     private _list:any = [] //私有变量

     protected age = 100 //这个子类可以访问 
     public subscribe(cb:any){
        this._list.push(cb)
     }

     public dispatch(){
         this._list.forEach((cb:any)=>{
             cb&&cb()
         })
     }
 }


 class Child extends Bus{

    aaa(){
        console.log(this.name,this.age)
    }
 }

 var obj = new Bus()
 obj.subscribe(()=>{

 })

 console.log(obj.name)
//  obj._list = []
//  console.log(obj._list)

 

class Person{
    //定义实例属性
        name:string='廖子乔';
        age:number= 18;
        zhiye='程序员';
    //    在属性前面使用static关键字可以定义类属性（镜态属性）
        static sex:string='男';
      static readonly  cj:number= 100;
        //定义方法 加static就是静态方法类方法 可以直接通过类去调用
        //开发中还是实例方法为主
        sayhello(){
            console.log('大集合')
        }
       static sayhello1(){
            console.log('大集合2')
        }
        // readonly 开头的属性表示一个只读的属性无法修改
        // 实例属性直接写    readonly  name:string='廖子乔'; 静态属性在static后面 static readonly  cj:number= 100;
    }
    const per =new Person();
    console.log(per);
    console.log(Person.sex
    );
    console.log(Person);
    console.log(Person.cj);
    
    per.sayhello();
    Person.sayhello1()
    
export default {}